/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sysprojectmg.combos.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import sysprojectmg.combo.be.ElemComboBE;
import sysprojectmg.conexion.ConectaDB;
import sysprojectmg.utiles.Globales;


/**
 *
 * @author yoshiki
 */
public class ElemComboDAO {

    public ArrayList<ElemComboBE> selectUsuarios(String strFiltro) throws SQLException, Exception {
        ArrayList<ElemComboBE> objLista = new ArrayList<ElemComboBE>();

        ConectaDB objConexion = new ConectaDB();
	String strQuery="";
        if (strFiltro.equals("Activo")) {
            strQuery = "SELECT USUARIO.idUsuario, USUARIO.usuario FROM USUARIO WHERE USUARIO.estado = 1";
        }

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		/*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    ElemComboBE objElem = new ElemComboBE();
                    objElem.setCodigo(objResultado.getString("idelemento"));
                    objElem.setDescripcion(objResultado.getString("descripcion"));
                    objLista.add(objElem);
                }
	} catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido.";
         objLista = null;
         throw new SQLException(strMsj);
        } finally {
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objLista;
    }

    public ArrayList<ElemComboBE> selectAllEstadosTabla() throws SQLException, Exception {
        ArrayList<ElemComboBE> objLista = new ArrayList<ElemComboBE>();

        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select idelemento, descripcion from elementos where idelemento like 'T%'";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		/*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    ElemComboBE objElem = new ElemComboBE();
                    objElem.setCodigo(objResultado.getString("idelemento").trim());
                    objElem.setDescripcion(objResultado.getString("descripcion").trim());
                    objLista.add(objElem);
                }
	}catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido.";
         objLista = null;
         throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objLista;
    }

    public ArrayList<ElemComboBE> selectAllTiposArreglos() throws SQLException, Exception {
        ArrayList<ElemComboBE> objLista = new ArrayList<ElemComboBE>();

        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select idelemento, descripcion from elementos where idelemento like 'R%'";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		/*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    ElemComboBE objElem = new ElemComboBE();
                    objElem.setCodigo(objResultado.getString("idelemento").trim());
                    objElem.setDescripcion(objResultado.getString("descripcion").trim());
                    objLista.add(objElem);
                }
	}catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido.";
         objLista = null;
         throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objLista;
     }

     public ArrayList<ElemComboBE> selectAllEstadosPerfil() throws SQLException, Exception {
        ArrayList<ElemComboBE> objLista = new ArrayList<ElemComboBE>();

        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select ele, descripcion from elemento where ele like 'F%'";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		/*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    ElemComboBE objElem = new ElemComboBE();
                    objElem.setCodigo(objResultado.getString("ele").trim());
                    objElem.setDescripcion(objResultado.getString("descripcion").trim());
                    objLista.add(objElem);
                }
	}catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido.";
         objLista = null;
         throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed())
                objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objLista;
    }

    

    public ArrayList<ElemComboBE> selectAllPerfiles() throws SQLException, Exception {
        ArrayList<ElemComboBE> objLista = new ArrayList<ElemComboBE>();

        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select idperfil, descripcion from perfil where estado = 'F01'";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		/*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    ElemComboBE objElem = new ElemComboBE();
                    objElem.setCodigo(objResultado.getString("idperfil"));
                    objElem.setDescripcion(objResultado.getString("descripcion"));
                    objLista.add(objElem);
                }
	}catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido.";
         objLista = null;
         throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objLista;
    }

    public ElemComboBE selectIdPerfil(int intIdPerfil) throws SQLException, Exception {
        ElemComboBE objElem = new ElemComboBE();
        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select idperfil, descripcion from perfil where idperfil=?";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		objPstm.setInt(1, intIdPerfil);
                /*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    objElem.setCodigo(objResultado.getString("idperfil"));
                    objElem.setDescripcion(objResultado.getString("descripcion"));
                }
	}catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido.";
                objElem = null;
                throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objElem;
    }

    
    public ElemComboBE selectIdEstado(String strEstado) throws SQLException, Exception {

        ElemComboBE objElem = new ElemComboBE();
        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select idelemento, descripcion from elementos where idelemento=?";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		objPstm.setString(1, strEstado);
                /*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    objElem.setCodigo(objResultado.getString("idelemento"));
                    objElem.setDescripcion(objResultado.getString("descripcion"));
                }
	}catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido.";
                objElem = null;
                throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objElem;
    }

    public ElemComboBE selectById(String strId) throws SQLException, Exception {

        ElemComboBE objElem = new ElemComboBE();
        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select idelemento, descripcion from elemento where ele=?";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		objPstm.setString(1, strId);
                /*ejecuto*/
		objResultado = objPstm.executeQuery();

		objResultado.next();
                objElem.setCodigo(objResultado.getString("idelemento"));
                objElem.setDescripcion(objResultado.getString("descripcion"));

	}catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido." + excSQL;
                objElem = null;
                throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objElem;
    }

    
    public ArrayList<ElemComboBE> selectPreguntasUsuario() throws SQLException, Exception {
        ArrayList<ElemComboBE> objLista = new ArrayList<ElemComboBE>();
        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select ele, descripcion from elemento where ele ilike 'P%'";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		
                /*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    ElemComboBE objElem = new ElemComboBE();
                    objElem.setCodigo(objResultado.getString("ele"));
                    objElem.setDescripcion(objResultado.getString("descripcion"));
                    objLista.add(objElem);
                }
	}catch (SQLException excSQL) {
		String strMsj = "Excepcion preparando la sentencia: "
                     + "La sentencia puede que esta incorrecta o la conexion se haya perdido.";
                objLista = null;
                throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objLista;
    }

    public ArrayList<Integer> selectAllPermisos(int IdPerfil) throws SQLException, Exception {

        ArrayList<Integer> objLista = new ArrayList<Integer>();
        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select p.idpermiso "
                        + "from perfilxpermiso pp, permiso p, perfil pe "
                        + "where pp.idpermiso = p.idpermiso and pe.idperfil = pp.idperfil and pe.idperfil = ?";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		objPstm.setInt(1, IdPerfil);
                /*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    objLista.add(objResultado.getInt("idpermiso"));
                }

	}catch (SQLException excSQL) {
		String strMsj = "Excepcion preparando la sentencia: "
                     + "La sentencia puede que esta incorrecta o la conexion se haya perdido.";
                objLista = null;
                throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objLista;
    }

    public ArrayList<ElemComboBE> selectAllCargos() throws SQLException, Exception {
        ArrayList<ElemComboBE> objLista = new ArrayList<ElemComboBE>();

        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select idcargo, nombre from cargo";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		/*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    ElemComboBE objElem = new ElemComboBE();
                    objElem.setCodigo(objResultado.getString("idcargo"));
                    objElem.setDescripcion(objResultado.getString("nombre"));
                    objLista.add(objElem);
                }
	}catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido.";
         objLista = null;
         throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objLista;
    }

    public ElemComboBE selectIdCargo(int strIdCargo) throws SQLException, Exception {
        ElemComboBE objElem = new ElemComboBE();
        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select idcargo, nombre from cargo where idcargo=?";

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
		objPstm.setInt(1, strIdCargo);
                /*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    objElem.setCodigo(objResultado.getString("idcargo"));
                    objElem.setDescripcion(objResultado.getString("nombre"));
                }
	}catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido." + excSQL;
                objElem = null;
                throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objElem;
    }

    public ArrayList<ElemComboBE> getAllParticipantes() throws SQLException, Exception {
        
        ArrayList<ElemComboBE> objLista = new ArrayList<ElemComboBE>();
        ConectaDB objConexion = new ConectaDB();
	String strQuery = "select pxp.idparticipante, p.nombre from participante p, participantexprocesoinscripcion pxp where estado='F01'"
                + "and p.idparticipante=pxp.idparticipante and idprocesoinscripcion=" + Globales.intIdProcesoInscripcion;

	PreparedStatement objPstm = null;
        ResultSet objResultado;

        try {
		objPstm = objConexion.getAcceso().prepareStatement(strQuery);
	        /*ejecuto*/
		objResultado = objPstm.executeQuery();

		while (objResultado.next())
                {
                    ElemComboBE objElem = new ElemComboBE();
                    objElem.setCodigo(objResultado.getString("idparticipante"));
                    objElem.setDescripcion(objResultado.getString("nombre"));
                    objLista.add(objElem);
                }
	}catch (SQLException excSQL) {
		String strMsj = "Excepción preparando la sentencia: "
                     + "La sentencia puede que esté incorrecta o la conexión se haya perdido." + excSQL;
                objLista = null;
                throw new SQLException(strMsj);
        }finally{
            if (!objConexion.getAcceso().isClosed()) objConexion.cerrarConexion();
            objConexion = null;
            objPstm=null;
        }

        return objLista;
    }

}

